package com.jieshao.rule


/**
 * 采集项目数据，变量用于渲染规则
 */
class ScriptContext {
    /**
     * 项目启动时加载
     */
    var projectPath: String = ""

    /**
     * git remote 启动时加载,修改时变更
     */
    var origin: String = ""

    var currentRevision: String = ""

    var isLocalFile: Boolean = false

    var filePath: String = ""

    var lineSelection: Pair<Int, Int>? = null
}

/**
 * 转换git的链接为https链接
 * 改造自gitlink的转换参数，感受群众的testCase力量，应该是兼容性最好的了
 */
fun convertGitUrl2Https(url: String?): String {
    return url.let {

        var tmp = it ?: return@let ""

        // Azure 支持存储库名称带有 .git 后缀，因此请勿删除它。
        if (!tmp.contains("dev.azure")) {
            tmp = tmp.removeSuffix(".git")
        }

        // 如果 URL 在 SCP 语法中使用 SSH 协议，请勿尝试删除端口，例如 'git@github.com:foo.git'，因为它不支持端口定义。尝试删除端口
        // 当存储库名称由数字组成时，将导致无效的 URL
        // 看 https://github.com/ben-gibson/GitLink/issues/94
        if (!tmp.startsWith("git@")) {
            tmp = tmp.replace(":\\d{1,5}".toRegex(), "") // remove the port
        }

        //修正https开头
        if (!tmp.startsWith("https")) {
            tmp = tmp
                .replace("git@", "")
                .replace(Regex("^[^:]+://"), "")
                .replace(":", "/")

            tmp = "https://".plus(tmp)
        }

        tmp = tmp.replace("//[\\w-:]+[@:]".toRegex(), "//")

        return@let tmp
    }
}